package ch.penas.web;

import java.io.Serializable;

import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;

import org.apache.log4j.Logger;

import ch.penas.business.dom.RechercheUtilisateur;
import ch.penas.business.dom.Utilisateur;
import ch.penas.business.service.UtilisateurService;
import ch.penas.business.service.UtilisateurServiceImpl;

/** @author Daniel */
@ManagedBean(name = "manageBeanUtilisateur")
@ApplicationScoped
public final class ManageBeanUtilisateur implements Serializable {

    /** Serialisation de la class pour une question de securiter. */
    private static final long serialVersionUID = 7821547244981771579L;
    
    /** */
    private static final Logger LOGGER = Logger.getLogger(ManageBeanUtilisateur.class);
    
    /** Declaration de la variable mUtilisateur de la class Utilisateur. */
    private Utilisateur mUtilisateur;
   
    /** Declaration de la variable mService de la class UtilisateurService. */
    private UtilisateurService mService;
    
    /** mRechercheUtilisateur permet d'acc�der � la class RechercheUtilisateur. */
    private RechercheUtilisateur mRechercheUtilisateur;

    /** Declaration du constructeur de la class ManageBeanUtilisateur. */
    public ManageBeanUtilisateur() {
        this.mUtilisateur = new Utilisateur();
        this.mRechercheUtilisateur = new RechercheUtilisateur();
        this.mService = new UtilisateurServiceImpl();
    }

    /** Permet d'ajouter un ou des utilisateur au service.
     * 
     * @return successUtilisateur
     */
    public String add() {
        this.mUtilisateur.validate();
        this.mService.add(this.mUtilisateur);
        return "successUtilisateur";
    }
    
    /** Permet de rechercher un/des utilisateur/s. */
    public void search() {
        this.mRechercheUtilisateur.validate();
        this.mService.search(this.mRechercheUtilisateur);
    }
    
    /** Permet de rechercher un/des ouvrage/s.
     * 
     * @return successOuvrage
     */
    public String searchFini() {
        return "successUtilisateur";
    }

    /** Permet d'acceder a la page d'enregistrement de l'utilisateur.
     * 
     * @return registerUtilisateur
     */
    public String toRegistration() {
        LOGGER.debug("registration");
        this.mUtilisateur = new Utilisateur();
        return "registerUtilisateur";
    }

    /** Permet d'acceder a la page de suppression de/des utilisateur/s.
     * 
     * @return deleteUtilisateur
     */
    public String toDelete() {
        LOGGER.debug("delete");
        this.mUtilisateur = new Utilisateur();
        return "deleteUtilisateur";
    }

    /** Permet d'acceder � la liste des utilisateurs.
     * 
     * @return list
     */
    public String toList() {
        LOGGER.debug("list");
        return "list";
    }
    
    /** Permet d'acceder a la page de rechairche de/des utilisateur/s.
     * 
     * @return rechercheUtilisateur
     */
    public String toSearch() {
        LOGGER.debug("recherche");
        return "rechercheUtilisateur";
    }

    /** Permet de recup�r� la valeur de mUtilisateur.
     * 
     * @return l'utilisateur
     */
    public Utilisateur getUtilisateur() {
        return this.mUtilisateur;
    }
    
    /** Permet de retourner la valeur de mRechercheUtilisateur qui est egale � RechercheUtilisateur.
     * 
     * @return mRechercheUtilisateur
     */
    public RechercheUtilisateur getRechercheUtilisateur() {
        return this.mRechercheUtilisateur;
    }
    
    /** Permet de modifier la valeur de SelectedUtilisateur.
     * 
     * @param utilisateur est egale a mUtilisateur de la class Utilisateur
     */
    public void setSelectedUtilisateur(final Utilisateur utilisateur) {
        this.mUtilisateur = utilisateur;
    }
    /** Permet de recupere la valeur de SelectedUtilisateur.
     * 
     * @return utilisateur
     */
    public Utilisateur getSelectedUtilisateur() {
        return this.getUtilisateur();
    }

    /** Permet de recupere la valeur de mService.
     * 
     * @return le service de l'utilisateur
     */
    public UtilisateurService getService() {
        return this.mService;
    }
}
